From 3ebe30bf3261eae5ec22c30533c63fb7a87d7a41 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sun, 23 Jun 2019 17:22:02 +0000 Subject: [PATCH] widget: create parent muxers lazily We need to create a muxer eagerly for every widget that has class actions, since those are otherwise missed in the action lookup on the muxer side. But otherwise, there is no reason to create parent muxers aggressively, as long as we update the parent muxers on root/unroot. This reduces the number of muxers we create in widget-factory from 210 to around 50. --- gtk/gtkwidget.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index 045dcef9d7..1aff2005fd 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -2891,6 +2891,8 @@ gtk_widget_root (GtkWidget *widget) if (priv->surface_transform_data) add_parent_surface_transform_changed_listener (widget); + _gtk_widget_update_parent_muxer (widget); + GTK_WIDGET_GET_CLASS (widget)->root (widget); if (!GTK_IS_ROOT (widget)) @@ -2911,6 +2913,8 @@ gtk_widget_unroot (GtkWidget *widget) surface_transform_data->tracked_parent) remove_parent_surface_transform_changed_listener (widget); + _gtk_widget_update_parent_muxer (widget); + GTK_WIDGET_GET_CLASS (widget)->unroot (widget); if (priv->context) @@ -11862,7 +11866,7 @@ gtk_widget_get_modifier_mask (GtkWidget *widget, static GtkActionMuxer * gtk_widget_get_parent_muxer (GtkWidget *widget, - gboolean create) + gboolean create) { GtkWidget *parent; @@ -11890,7 +11894,7 @@ _gtk_widget_update_parent_muxer (GtkWidget *widget) return; gtk_action_muxer_set_parent (muxer, - gtk_widget_get_parent_muxer (widget, TRUE)); + gtk_widget_get_parent_muxer (widget, FALSE)); } GtkActionMuxer * -- 2.30.2